package com.codrim.cs.data.server.dao.entity;

import com.codrim.common.utils.math.NumberUtils;
import com.codrim.cs.data.rpc.dto.param.StatisticDataDTO;
import com.codrim.cs.data.server.dao.param.StatCsUniqueKey;

import java.util.Optional;

/**
 * 报表统计生成结果的基类
 *
 * @author Liang.Zhuge
 * @date 15/08/2017
 */
public abstract class AbstractStatCsEntity<Key extends StatCsUniqueKey> {

    /**
     * 将`source`中的数据叠加到自身上
     *
     * @param source 待叠加实体
     */
    public abstract void plus(AbstractStatCsEntity source);

    public abstract void plus(StatisticDataDTO data);

    public abstract Key createUniqueKey();

    public abstract Integer getId();

    int add(Integer i1, Integer i2) {
        return NumberUtils.toInt(i1) + NumberUtils.toInt(i2);
    }

    long add(Long l1, Integer l2) {
        return Optional.ofNullable(l1).orElse(0L) + Optional.ofNullable(l2).orElse(0);
    }

    long add(Long l1, Long l2) {
        return Optional.ofNullable(l1).orElse(0L) + Optional.ofNullable(l2).orElse(0L);
    }

    float add(Float f1, Float f2) {
        return Optional.ofNullable(f1).orElse(0f) + Optional.ofNullable(f2).orElse(0f);
    }

}
